﻿// -----------------------------------------------------------------------
// <copyright file="PushRequest.cs" company="Zen Design Corp">
// TODO: Update copyright text.
// </copyright>
// -----------------------------------------------------------------------

namespace Zen.BlackBerry.Push.Request
{
	using System;
	using System.Collections.Generic;
	using Zen.BlackBerry.Common;
	using Zen.BlackBerry.Pap;
	using Zen.BlackBerry.Subscription;

	/// <summary>
	/// Represents a push request object.
	/// </summary>
	/// <remarks>
	/// A push request object model captures the high-level attributes that
	/// overall define a push message at push time. The SDK can persist this
	/// value object to storage so that you can query old push requests in
	/// storage at a later time (i.e. for generating reports, etc.).
	/// For one push request, there will also be many push request details
	/// saved to storage (one for each subscriber).
	/// </remarks>
	public class PushRequest
	{
		/// <summary>
		/// Gets or sets the address count.
		/// </summary>
		/// <value>The address count.</value>
		public int AddressCount
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the bearer.
		/// </summary>
		/// <value>The bearer.</value>
		public string Bearer
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the length of the content.
		/// </summary>
		/// <value>The length of the content.</value>
		public int ContentLength
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the created date.
		/// </summary>
		/// <value>The created date.</value>
		public DateTime CreatedDate
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the delivery method.
		/// </summary>
		/// <value>The delivery method.</value>
		public DeliveryMethod DeliveryMethod
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the enterprise notify URL.
		/// </summary>
		/// <value>The enterprise notify URL.</value>
		public string EnterpriseNotifyUrl
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the enterprise status code.
		/// </summary>
		/// <value>The enterprise status code.</value>
		public StatusCode EnterpriseStatusCode
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the enterprise status description.
		/// </summary>
		/// <value>The enterprise status description.</value>
		public string EnterpriseStatusDescription
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the expiry date.
		/// </summary>
		/// <value>The expiry date.</value>
		public DateTime ExpiryDate
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the id.
		/// </summary>
		/// <value>The id.</value>
		public string Id
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the last updated date.
		/// </summary>
		/// <value>The last updated date.</value>
		public DateTime LastUpdatedDate
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the public notify URL.
		/// </summary>
		/// <value>The public notify URL.</value>
		public string PublicNotifyUrl
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the public status code.
		/// </summary>
		/// <value>The public status code.</value>
		public StatusCode PublicStatusCode
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the public status description.
		/// </summary>
		/// <value>The public status description.</value>
		public string PublicStatusDescription
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the push application id.
		/// </summary>
		/// <value>The push application id.</value>
		public string PushApplicationId
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the subscribers.
		/// </summary>
		/// <value>The subscribers.</value>
		public List<SubscriberPartial> Subscribers
		{
			get;
			set;
		}

		/// <summary>
		/// Gets or sets the total length of the content.
		/// </summary>
		/// <value>The total length of the content.</value>
		public int TotalContentLength
		{
			get;
			set;
		}
	}
}
